/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.ufrn.dimap.Grafo;

import br.ufrn.dimap.Grafo.excecoes.*;
import br.ufrn.dimap.Visitors.Visitor;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;

public abstract class Rede implements Serializable {
    //static final long serialVersionUID = -8134418438354408967;
    static final long serialVersionUID = 9199155065328240806L;
    abstract public Usuario buscarUsuarioPorID(String id);
    abstract public Usuario buscarUsuarioPorNome(String nome);
    abstract public Usuario atualizarUsuario(Usuario usuario);
    abstract public int buscarPosicaoUsuario(String nome);
    abstract public boolean existeUsuario(String nome);
    abstract public void inserirUsuario(Usuario vertice) throws UsuarioJaExistenteException, RedeCheiaException;
    abstract public void inserirRelacao(Relacao aresta)throws ParDeUsuariosNaoExisteException;
    abstract public Relacao removerRelacao(String origem, String destino)throws ParDeUsuariosNaoExisteException;
    abstract public Usuario removerUsuario(String nome) throws UsuarioNaoExistenteException;
    abstract public Iterator<Relacao> obterRelacoes();
    abstract public void accept(Visitor v);
    abstract public Usuario getRaiz();
    abstract public void setRaiz(Usuario u);
    abstract public List<Usuario> getAmigosLista(Usuario usuario);
    //abstract public List<Usuario> buscaEmLargura(Usuario usuario);
    abstract public List<Usuario> buscaEmLargura(int raiz, Visitor v);
    abstract public List<Usuario> buscaEmProfundidade(int raiz, Visitor v);
    abstract public boolean existeInfo(String id);
}
